#ifndef BITMAP_H
#define BITMAP_H

#include"os_type.h"
#include"list.h"

class Bitmap
{
public:
    int length;//被管理的资源个数，bitmap的总位数
    char* bitmap;//bitmap 起始地址
    //指针来访问BitMap的存储区域时，最小的访问单元是字节，而资源单元的状态是使用一个位来表示的不可使用bitmap[i]访问
    List idlePartitions;//空闲分区
    Bitmap();//初始化
    void initialize(char* bitmap,const int length);//设置Bitmap,起始地址和总位数（即被管理的资源个数）
    bool get(const int index) const;//获取第index个资源状态，true=allocated,false=free
    void set(const int index,const bool status);//设置第index个状态
    int allocate(const int count);//分配count个连续资源，若没有返回-1，否则返回第一个资源单元序号
    int allocate_best_fit(const int count);//最佳适应算法，从小到大分配最合适的内存块
    void release(const int index,const int count);//释放第index个资源开始的count个资源
    char* getBitmap();//返回bitmap存储区域
    int size() const;//返回bitmap大小
private:
    Bitmap(const Bitmap&){}
    void operator=(const Bitmap&){}
};

#endif